package com.micro.ai.commons.constant;

/**
 * 错误码枚举
 * 5位编码：A开头用户端错误，B开头服务端错误，C开头业务错误
 * 
 * @author micro-ai
 * @since 0.0.1
 */
public enum ErrorCodeEnum {
    
    // ========== 用户端错误 A开头 ==========
    A0001("A0001", "用户端错误", "用户端错误"),
    A0002("A0002", "用户注册错误", "用户注册错误"),
    A0003("A0003", "用户名已存在", "用户名已存在"),
    A0004("A0004", "用户名不存在", "用户名不存在"),
    A0005("A0005", "用户名或密码错误", "用户名或密码错误"),
    A0006("A0006", "用户未登录", "用户未登录"),
    A0007("A0007", "用户权限不足", "用户权限不足"),
    A0008("A0008", "用户状态异常", "用户状态异常"),
    A0009("A0009", "用户操作频繁", "用户操作频繁"),
    A0010("A0010", "用户输入参数错误", "用户输入参数错误"),
    
    // ========== 服务端错误 B开头 ==========
    B0001("B0001", "系统执行出错", "系统执行出错"),
    B0002("B0002", "系统超时", "系统超时"),
    B0003("B0003", "系统过载", "系统过载"),
    B0004("B0004", "系统限流", "系统限流"),
    B0005("B0005", "系统熔断", "系统熔断"),
    B0006("B0006", "系统降级", "系统降级"),
    B0007("B0007", "系统维护", "系统维护"),
    B0008("B0008", "系统异常", "系统异常"),
    B0009("B0009", "系统资源不足", "系统资源不足"),
    B0010("B0010", "系统配置错误", "系统配置错误"),
    
    // ========== 业务错误 C开头 ==========
    C0001("C0001", "业务处理失败", "业务处理失败"),
    C0002("C0002", "数据不存在", "数据不存在"),
    C0003("C0003", "数据已存在", "数据已存在"),
    C0004("C0004", "数据状态异常", "数据状态异常"),
    C0005("C0005", "业务规则校验失败", "业务规则校验失败"),
    C0006("C0006", "业务操作超时", "业务操作超时"),
    C0007("C0007", "业务资源不足", "业务资源不足"),
    C0008("C0008", "业务配置错误", "业务配置错误"),
    C0009("C0009", "业务依赖服务异常", "业务依赖服务异常"),
    C0010("C0010", "业务数据异常", "业务数据异常"),
    
    // ========== AI相关错误 D开头 ==========
    D0001("D0001", "AI模型错误", "AI模型错误"),
    D0002("D0002", "AI模型不存在", "AI模型不存在"),
    D0003("D0003", "AI模型加载失败", "AI模型加载失败"),
    D0004("D0004", "AI推理失败", "AI推理失败"),
    D0005("D0005", "AI训练失败", "AI训练失败"),
    D0006("D0006", "AI数据处理失败", "AI数据处理失败"),
    D0007("D0007", "AI预测失败", "AI预测失败"),
    D0008("D0008", "AI模型版本错误", "AI模型版本错误"),
    D0009("D0009", "AI服务不可用", "AI服务不可用"),
    D0010("D0010", "AI配额超限", "AI配额超限");
    
    /**
     * 错误码
     */
    private final String code;
    
    /**
     * 错误信息
     */
    private final String message;
    
    /**
     * 详细描述
     */
    private final String description;
    
    ErrorCodeEnum(String code, String message, String description) {
        this.code = code;
        this.message = message;
        this.description = description;
    }
    
    public String getCode() {
        return code;
    }
    
    public String getMessage() {
        return message;
    }
    
    public String getDescription() {
        return description;
    }
    
    /**
     * 根据错误码获取枚举
     */
    public static ErrorCodeEnum fromCode(String code) {
        for (ErrorCodeEnum errorCode : values()) {
            if (errorCode.getCode().equals(code)) {
                return errorCode;
            }
        }
        return B0001; // 默认返回系统执行出错
    }
}
